#include "infraredinfotab.h"
#include <QHeaderView>
#include <QHBoxLayout>
#include "infraredfeature.h"

InfraredInfoTab::InfraredInfoTab(QWidget *parent)
    :MapInfoTab(parent)
    ,m_infraredFeature{std::make_shared<InfraredFeature>(this)}
    ,m_pChartBox{new QGroupBox("图谱数据")}
    ,m_pChartData{new QTextEdit}
    ,m_pMainLayout{new QHBoxLayout(this)}
    ,m_pLayout{new QHBoxLayout(this)}
{
    // 初始化Feature UI
    QWidget* featureWidget = m_infraredFeature->initUI(this);
    
    // 设置图谱数据显示区域
    m_pLayout->addWidget(m_pChartData);
    m_pChartBox->setLayout(m_pLayout);

    // 主布局添加Feature组件和图谱数据区域
    m_pMainLayout->addWidget(featureWidget);
    m_pMainLayout->addWidget(m_pChartBox);

    setLayout(m_pMainLayout);
}

InfraredInfoTab::~InfraredInfoTab()
{
    // 智能指针会自动管理m_infraredFeature的生命周期
    delete m_pChartBox;
    delete m_pChartData;
    delete m_pMainLayout;
    delete m_pLayout;
}

/**
* @brief 设置检测数据类型编码
* @param code 数据类型编码
*/
void InfraredInfoTab::setDataTypeCode(uint8_t code)
{
    if (m_infraredFeature) {
        m_infraredFeature->setDataTypeCode(code);
    }
}

/**
* @brief 设置图谱数据长度
* @param length 数据长度
*/
void InfraredInfoTab::setDataLength(int32_t length)
{
    if (m_infraredFeature) {
        m_infraredFeature->setDataLength(length);
    }
}

/**
* @brief 设置图谱生成时间
* @param time 生成时间
*/
void InfraredInfoTab::setCreateTime(const QString& time)
{
    if (m_infraredFeature) {
        m_infraredFeature->setCreateTime(time);
    }
}

/**
* @brief 设置图谱性质
* @param property 图谱性质
*/
void InfraredInfoTab::setChartProperty(const DataSpecificationGW::SpectrumCharacter& property)
{
    if (m_infraredFeature) {
        m_infraredFeature->setChartProperty(property);
    }
}

/**
* @brief 设置被测设备名称
* @param name 设备名称
*/
void InfraredInfoTab::setDeviceName(const QString &name)
{
    if (m_infraredFeature) {
        m_infraredFeature->setDeviceName(name);
    }
}

/**
* @brief 设置被测设备编码
* @param code 设备编码
*/
void InfraredInfoTab::setDeviceCode(const QString &code)
{
    if (m_infraredFeature) {
        m_infraredFeature->setDeviceCode(code);
    }
}

/**
* @brief 设置测点名称
* @param name 测点名称
*/
void InfraredInfoTab::setMeasurementName(const QString &name)
{
    if (m_infraredFeature) {
        m_infraredFeature->setMeasurementName(name);
    }
}

/**
* @brief 设置测点编码
* @param code 测点编码
*/
void InfraredInfoTab::setMeasurementCode(const QString &code)
{
    if (m_infraredFeature) {
        m_infraredFeature->setMeasurementCode(code);
    }
}

/**
* @brief 设置检测通道标志
* @param flag 通道标志
*/
void InfraredInfoTab::setChannelFlag(int64_t flag)
{
    if (m_infraredFeature) {
        m_infraredFeature->setChannelFlag(flag);
    }
}

/**
* @brief 设置存储数据类型
* @param type 数据类型
*/
void InfraredInfoTab::setDataType(uint8_t type)
{
    if (m_infraredFeature) {
        m_infraredFeature->setDataType(type);
    }
}

/**
* @brief 设置温度单位
* @param unit 单位
*/
void InfraredInfoTab::setTemperatureUnit(uint8_t unit)
{
    if (m_infraredFeature) {
        m_infraredFeature->setTemperatureUnit(unit);
    }
}

/**
* @brief 设置温度点阵宽度
* @param width 宽度
*/
void InfraredInfoTab::setTemperatureMatrixWidth(int32_t width)
{
    // 在InfraredFeature中未实现此功能，可根据需要添加
}

/**
* @brief 设置温度点阵高度
* @param height 高度
*/
void InfraredInfoTab::setTemperatureMatrixHeight(int32_t height)
{
    // 在InfraredFeature中未实现此功能，可根据需要添加
}

/**
* @brief 设置可见光照片数据长度
* @param length 数据长度
*/
void InfraredInfoTab::setVisibleLightPhotoDataLength(int32_t length)
{
    // 在InfraredFeature中未实现此功能，可根据需要添加
}

/**
* @brief 设置红外照片数据长度
* @param length 数据长度
*/
void InfraredInfoTab::setInfraredPhotoDataLength(int32_t length)
{
    // 在InfraredFeature中未实现此功能，可根据需要添加
}

/**
* @brief 设置辐射率
* @param emissivity 辐射率值
*/
void InfraredInfoTab::setEmissivity(float emissivity)
{
    if (m_infraredFeature) {
        m_infraredFeature->setEmissivity(emissivity);
    }
}

/**
* @brief 设置测试距离
* @param distance 距离值
*/
void InfraredInfoTab::setTestDistance(float distance)
{
    // 在InfraredFeature中未实现此功能，可根据需要添加
}

/**
* @brief 设置大气温度
* @param temperature 温度值
*/
void InfraredInfoTab::setAtmosphericTemperature(float temperature)
{
    // 在InfraredFeature中未实现此功能，可根据需要添加
}

/**
* @brief 设置相对湿度
* @param humidity 湿度值
*/
void InfraredInfoTab::setRelativeHumidity(int8_t humidity)
{
    // 在InfraredFeature中未实现此功能，可根据需要添加
}

/**
* @brief 设置反射温度
* @param temperature 温度值
*/
void InfraredInfoTab::setReflectionTemperature(float temperature)
{
    // 在InfraredFeature中未实现此功能，可根据需要添加
}

/**
* @brief 设置温宽上限
* @param upperLimit 上限值
*/
void InfraredInfoTab::setTemperatureUpperLimit(float upperLimit)
{
    if (m_infraredFeature) {
        m_infraredFeature->setMaxTemperature(upperLimit);
    }
}

/**
* @brief 设置温宽下限
* @param lowerLimit 下限值
*/
void InfraredInfoTab::setTemperatureLowerLimit(float lowerLimit)
{
    if (m_infraredFeature) {
        m_infraredFeature->setMinTemperature(lowerLimit);
    }
}

/**
* @brief 设置红外图谱数据
* @param data 图谱数据
*/
void InfraredInfoTab::setInfraredChartData(const QByteArray& data)
{
    if (m_infraredFeature) {
        m_infraredFeature->setInfraredImageData(data);
    }
    
    // 显示图谱数据的十六进制表示
    QString hexString;
    for (int i = 0; i < data.size() && i < 200; ++i) {
        hexString += QString("%1 ").arg((unsigned char)data.at(i), 2, 16, QChar('0'));
        if ((i + 1) % 16 == 0) {
            hexString += "\n";
        }
    }
    
    if (data.size() > 200) {
        hexString += "\n...";
    }
    
    if (m_pChartData) {
        m_pChartData->setText(hexString);
    }
}

/**
* @brief 设置可见光照片数据
* @param data 数据
*/
void InfraredInfoTab::setVisibleLightPhotoData(uint8_t data)
{
    // 在InfraredFeature中未实现此功能，可根据需要添加
}

/**
* @brief 设置红外照片数据
* @param data 数据
*/
void InfraredInfoTab::setInfraredPhotoData(uint8_t data)
{
    // 在InfraredFeature中未实现此功能，可根据需要添加
}

QTableWidgetItem* InfraredInfoTab::createTableWidgetItem(const QString& text)
{
    QTableWidgetItem* item = new QTableWidgetItem(text);
    QFont font;
    font.setBold(true);
    item->setFont(font);
    item->setTextAlignment(Qt::AlignCenter);
    return item;
}
